package com.ruoyi.system.domain;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.ruoyi.common.core.domain.BaseEntity;
import com.ruoyi.common.utils.DictUtils;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import lombok.experimental.Accessors;
import org.springframework.data.annotation.Transient;

/**
 * 告警类型对象 t_alarm_type
 * 
 * @author wp
 * @date 2023-08-10
 */
@NoArgsConstructor
@AllArgsConstructor
@Data
@Accessors(chain = true)
@ToString
@TableName(value = "t_alarm_type")
public class AlarmType extends BaseEntity {

    /** ID */
    @TableId(type = IdType.ASSIGN_ID)
    private Long id;

    /** 名称 */
    @ApiModelProperty("名称")
    private String name;

    /** 类型  */
    @ApiModelProperty("类型")
    private Integer type;

    /** 级别 0：低风险 1：中风险 2：高风险 */
    @ApiModelProperty("级别 0：低风险 1：中风险 2：高风险")
    private Integer level;

    /** 来源 0：设备 1：平台 */
    @ApiModelProperty("来源 0：设备 1：平台")
    private Integer source;

    /** 级别名称 **/
    @TableField(exist = false)
    private String levelName;
    /** 自定义级别 **/
    @TableField(exist = false)
    private Integer levelSetting;
    /** 自定义所属公司ID **/
    @TableField(exist = false)
    private Long companyId;
    @ApiModelProperty("名称数组")
    @TableField(exist = false)
    @JsonIgnore
    private String[] names;

    /**
     * 自定义等级对象转换
     * @param alarmType
     * @return
     */
    public static AlarmType toCustomLevelModel(AlarmType alarmType){
        //告警类型平台未设置,则直接返回未知
        if (alarmType == null) {
            return new AlarmType().setLevelName("未知");
        }
        //若用户设置了告警等级，则使用自定义等级;未设置则使用默认等级
        if (alarmType.getLevelSetting() != null) {
            alarmType.setLevel(alarmType.getLevelSetting());
        }
        //告警等级名称
        alarmType.setLevelName(DictUtils.getDictLabel("alarmLevel", alarmType.getLevel()));
        return alarmType;
    }
}
